home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / muds / mordor_2.000 / mordor_2 / src / plist.c < prev    next >
C/C++ Source or Header  |  1995-04-24  |  3KB  |  144 lines

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include "mstruct.h"
  4. #include "mextern.h"
  5.  
  6. #define set_flag(f,n) ((f) |= 1 << (n))
  7. #define clr_flag(f,n) ((f) &= ~(1 << (n)))
  8. #define is_fset(f,n) ((f) & 1 << (n))
  9.  
  10. main(int argc, char *argv[])
  11. /* plist coomand provides a quick way to check a given players *
  12.  * level, class, password and inventory without having to log  *
  13.  * the player in or use the editor */
  14.  
  15. {
  16. creature    *player;
  17. int        i,adj,lvl=0;
  18. char        flags = 0;
  19.  
  20.     adj = 1;
  21.  
  22.  
  23.     if (argc < 2) {
  24.         printf("syntax: plist [[-pni] [-l #]] <players>\n");
  25.         return;
  26.     }
  27.  
  28.     for (i=1;i<argc;i++){
  29.  
  30.         if (argv[i][0] == '-'){
  31.             switch(argv[i][1]){
  32.                 case 'i':
  33.             set_flag(flags,0);
  34.                     continue;
  35.                 break;
  36.                 case 'n':
  37.             set_flag(flags,1);
  38.                     continue;
  39.                 case 'p':
  40.             set_flag(flags,2);
  41.                     continue;
  42.                 break;  
  43.             }
  44.  
  45.             if(i+1 < argc && isdigit(argv[i+1][0])){
  46.                 switch(argv[i][1]){
  47.                     case 'l':
  48.                         lvl = atoi(argv[i+1]);
  49.                     break;
  50.                     default:
  51.                        set_flag(flags,3); 
  52.                     break;
  53.                 }
  54.                 i++;
  55.             }
  56.             else
  57.                 set_flag(flags,3); 
  58.         }
  59.     else
  60.         break;
  61.  
  62.         if (is_fset(flags,3)){
  63.             printf("syntax: plist [[-pni] [-l #]] <players>\n");
  64.             return;
  65.         }
  66.             
  67.     } 
  68.     adj = i;
  69.  
  70.     if (adj >= argc){
  71.             printf("syntax: plist [[-pni] [-l #]] <players>\n");
  72.         return;
  73.     }
  74.  
  75.     for(i= adj;i < argc; i++){
  76.  
  77.         if(!isupper(argv[i][0]))
  78.             continue;    
  79.         if(load_ply(argv[i], &player) < 0){
  80.             printf("Player Load Error (%s).\n", argv[i]);
  81.             continue;
  82.         }
  83.  
  84.         /* not lvl check or player = lvl */
  85.         if( !lvl || player->level == lvl){
  86.            printf("%s%s",(!is_fset(flags,1)) ? "Name: " : "",
  87.             player->name);
  88.  
  89.         /*print  password */
  90.         if (is_fset(flags,2))
  91.             printf(" (%s)\n",player->password);
  92.         else
  93.             printf("\n");
  94.  
  95.         /* if not name only display */
  96.         if(!is_fset(flags,1))
  97.             printf("Class: %s  (%d) %s\n",class_str[player->class],
  98.                player->level,race_str[player->race]);
  99.  
  100.         /* print players inventory */
  101.         if(is_fset(flags,0)){
  102.             otag *obj, *cnt;
  103.             int len = 0;
  104.  
  105.             printf("Inventory:\n");
  106.             obj = player->first_obj; 
  107.             if(!obj) printf("none");
  108.  
  109.             while(obj){
  110.             printf("%s%s",obj->obj->name, (obj->next_tag) ?
  111.                 (F_ISSET(obj->obj,OCONTN)) ? ":" :", " : ".");
  112.             len += strlen(obj->obj->name);
  113.  
  114.             if(F_ISSET(obj->obj,OCONTN)){
  115.                 cnt = obj->obj->first_obj;
  116.                 printf("(");
  117.                 if (!cnt) printf("empty");
  118.                 while(cnt){
  119.                 printf("%s%s",cnt->obj->name, 
  120.                   (cnt->next_tag) ?  ", " : "");
  121.                 len += strlen(cnt->obj->name);
  122.                 if (len > 50){
  123.                     printf("\n");
  124.                     len = 0; }
  125.                 cnt = cnt->next_tag;
  126.                 }
  127.                 printf(")%s",(obj->next_tag) ? ", " : ".");
  128.             }
  129.             if (len > 50){
  130.                 printf("\n");
  131.                 len = 0;
  132.             }
  133.                        obj = obj->next_tag;    
  134.             }
  135.                printf("\n");
  136.         }
  137.                 }
  138.  
  139.         free_crt(player);
  140.     }
  141.  
  142.     return;
  143. }
  144.